home *** CD-ROM | disk | FTP | other *** search
- #define REAL_REG_ENTRY_POINT(x) R ## x ## :
- #define REG_ENTRY_POINT(x) REAL_REG_ENTRY_POINT(x)
- #define REAL_REG_FUNC_NAME(x) R ## x
- #define REG_FUNC_NAME(x) REAL_REG_FUNC_NAME(x)
- #define REAL_C_FUNC_NAME(x) _ ## x
- #define C_FUNC_NAME(x) REAL_C_FUNC_NAME(x)
-
- #define rlmemcpy 1
- #define rlmemmove 2
- #define rmemicmp 3
- #define rstradj 4
- #define rstristr 5
- #define rstrnset 6
- #define rstrpcpy 7
- #define rstrpos 8
- #define rstrrpbrk 9
- #define rstrrpos 10
- #define rstrset 11
- #define rstrtrim 12
- #define rsubnstr 13
- #define rsubstr 14
-
- #if TARGET == rlmemcpy
- # define NAME lmemcpy
- # define PARMREGS 1
- # define SAVEREGS 1
- # define ADD_TST_L
- #elif TARGET == rlmemmove
- # define NAME lmemmove
- # define PARMREGS 1
- # define SAVEREGS 1
- # define ADD_TST_L
- #elif TARGET == rmemicmp
- # define NAME memicmp
- # define PARMREGS 2
- # define SAVEREGS 2
- # define ADD_TST_W
- #elif TARGET == rstradj
- # define NAME stradj
- # define PARMREGS 3
- # define SAVEREGS 1
- # define ADD_TST_L
- #elif TARGET == rstristr
- # define NAME stristr
- # define PARMREGS 4
- # define SAVEREGS 3
- # define ADD_TST_L
- #elif TARGET == rstrnset
- # define NAME strnset
- # define PARMREGS 5
- # define SAVEREGS 4
- # define ADD_TST_L
- #elif TARGET == rstrpcpy
- # define NAME strpcpy
- # define PARMREGS 6
- # define SAVEREGS 5
- # define ADD_TST_L
- #elif TARGET == rstrpos
- # define NAME strpos
- # define PARMREGS 3
- # define SAVEREGS 6
- # define ADD_TST_W
- #elif TARGET == rstrrpbrk
- # define NAME strrpbrk
- # define PARMREGS 4
- # define SAVEREGS 7
- # define ADD_TST_L
- #elif TARGET == rstrrpos
- # define NAME strrpos
- # define PARMREGS 3
- # define SAVEREGS 4
- # define ADD_TST_W
- #elif TARGET == rstrset
- # define NAME strset
- # define PARMREGS 3
- # define SAVEREGS 8
- # define ADD_TST_L
- #elif TARGET == rstrtrim
- # define NAME strtrim
- # define PARMREGS 4
- # define SAVEREGS 9
- # define ADD_TST_L
- #elif TARGET == rsubnstr
- # define NAME subnstr
- # define PARMREGS 7
- # define SAVEREGS 2
- # define ADD_TST_L
- #elif TARGET == rsubstr
- # define NAME substr
- # define PARMREGS 7
- # define SAVEREGS 2
- # define ADD_TST_L
- #else
- #error Invalid value for TARGET
- #endif
-
- .text
- .globl REG_FUNC_NAME(NAME)
-
- REG_ENTRY_POINT(NAME)
-
- #if SAVEREGS == 1
- movem.l d2/a2,-(sp)
- #elif SAVEREGS == 2
- movem.l a2,-(sp)
- #elif SAVEREGS == 3
- #elif SAVEREGS == 4
- movem.l d1/a1/a2,-(sp)
- #elif SAVEREGS == 5
- movem.l d1/d2/a2,-(sp)
- #elif SAVEREGS == 6
- movem.l d2/a1/a2,-(sp)
- #elif SAVEREGS == 7
- movem.l a1,-(sp)
- #elif SAVEREGS == 8
- movem.l d1/d2/a1/a2,-(sp)
- #elif SAVEREGS == 9
- movem.l d2/a1,-(sp)
- #else
- #endif
-
- #if PARMREGS == 1
- move.l d1,-(sp)
- movem.l a0/a1,-(sp)
- #elif PARMREGS == 2
- move.w d2,-(sp)
- movem.l a0/a1,-(sp)
- #elif PARMREGS == 3
- move.w d1,-(sp)
- move.l a0,-(sp)
- #elif PARMREGS == 4
- movem.l a0/a1,-(sp)
- #elif PARMREGS == 5
- movem.w d1/d2,-(sp)
- move.l a0,-(sp)
- #elif PARMREGS == 6
- movem.l a1/a2,-(sp)
- move.l a0,-(sp)
- #elif PARMREGS == 7
- move.w d1,-(sp)
- move.w d2,-(sp)
- movem.l a0/a1,-(sp)
- #else
- #endif
-
- jsr C_FUNC_NAME(NAME)
-
- #if PARMREGS == 1
- lea 12(sp),sp
- #elif PARMREGS == 2
- lea 10(sp),sp
- #elif PARMREGS == 3
- addq.l #6,sp
- #elif PARMREGS == 4
- addq.l #8,sp
- #elif PARMREGS == 5
- addq.l #8,sp
- #elif PARMREGS == 6
- lea 12(sp),sp
- #elif PARMREGS == 7
- lea 12(sp),sp
- #else
- #endif
-
- #if SAVEREGS == 1
- movem.l (sp)+,d2/a2
- #elif SAVEREGS == 2
- movem.l (sp)+,a2
- #elif SAVEREGS == 3
- #elif SAVEREGS == 4
- movem.l (sp)+,d1/a1/a2
- #elif SAVEREGS == 5
- movem.l (sp)+,d1/d2/a2
- #elif SAVEREGS == 6
- movem.l (sp)+,d2/a1/a2
- #elif SAVEREGS == 7
- movem.l (sp)+,a1
- #elif SAVEREGS == 8
- movem.l (sp)+,d1/d2/a1/a2
- #elif SAVEREGS == 9
- movem.l (sp)+,d2/a1
- #else
- #endif
-
- #ifdef ADD_TST_W
- tst.w d0
- #else
- # ifdef ADD_TST_L
- tst.l d0
- # endif
- #endif
- rts
-